package com.zjsru.oneDay;

/**
 * 2918. 数组的最小相等和
 *
 * @Author: cookLee
 * @Date: 2025-05-10
 */
public class MinSum {

    /**
     * 主
     * \
     * 输入：nums1 = [3,2,0,1,0], nums2 = [6,5,0]
     * 输出：12
     * 解释：可以按下述方式替换数组中的 0 ：
     * - 用 2 和 4 替换 nums1 中的两个 0 。得到 nums1 = [3,2,2,1,4] 。
     * - 用 1 替换 nums2 中的一个 0 。得到 nums2 = [6,5,1] 。
     * 两个数组的元素和相等，都等于 12 。可以证明这是可以获得的最小相等和
     * \
     * 输入：nums1 = [2,0,2,0], nums2 = [1,4]
     * 输出：-1
     * 解释：无法使两个数组的和相等。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        MinSum minSum = new MinSum();
        System.out.println(minSum.minSum(new int[]{3, 2, 0, 1, 0}, new int[]{6, 5, 0}));
    }

    public long minSum(int[] nums1, int[] nums2) {
        long zero1 = 0, sum1 = 0;
        long zero2 = 0, sum2 = 0;
        for (int j : nums1) {
            if (j == 0) {
                zero1++;
            } else {
                sum1 += j;
            }
        }
        //能操作的最小值
        sum1 = sum1 + zero1;
        for (int j : nums2) {
            if (j == 0) {
                zero2++;
            } else {
                sum2 += j;
            }
        }
        //能操作的最小值
        sum2 = sum2 + zero2;
        //zero1为0，sum2大于sum1，或者zero2为0，sum1大于sum2，以上情况不可能相等因为没有0时没有相加的操作空间
        if ((zero1 == 0 && sum2 > sum1) || (zero2 == 0 && sum1 > sum2)) {
            return -1;
        }
        return Math.max(sum1, sum2);
    }

}
